package cn.itsource.service.impl;

import cn.itsource.domain.User;
import cn.itsource.exception.CodeException;
import cn.itsource.exception.NONameException;
import cn.itsource.exception.PasswordComparisonException;
import cn.itsource.mapper.UserMapper;
import cn.itsource.service.IUserService;
import cn.itsource.util.UserContext;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.UUID;

@Service
public class UserServiceImpl implements IUserService {
    @Autowired
    private UserMapper userMapper;
    // 登录验证
    @Override
    public String login(String name, String password) {
        // 判断用户名是否为空
        if (StringUtils.isBlank(name)) {
            throw new RuntimeException("用户名为空...");
            // 判断用户密码是否为空
        }else if (StringUtils.isBlank(password)){
            throw new RuntimeException("密码为空...");
        }
        // 查询用户
        User user = userMapper.getName(name);
        // 用户不存在返回自定义错误信息
        if (user==null){
            throw new NONameException("用户名错误");
        }
        if (!(user.getPassword().equals(password))){
            // 判断用户密码是否正确
            throw new PasswordComparisonException("密码错误");
        }
        // 生成一个随机数的令牌
        String token = UUID.randomUUID().toString();
        // 将令牌和对应用户数据放进map
        UserContext.setByNamePassword(token, user);

        return token;
    }

    // 判断验证码
    @Override
    public String enroll(User user) {
        // 比较验证码
        if (user.getCode()!=UserContext.getCode()){
            // 如果不相等返回错误信息
            throw new CodeException("验证码错误");
        }
        // 插入数据库数据
        userMapper.save(user);
        // 生成一个随机数的令牌
        String token = UUID.randomUUID().toString();
        // 将令牌和对应用户数据放进map
        UserContext.setByNamePassword(token, user);
        // 返回token令牌
        return token;
    }
}
